package Banco.DAO;

import Banco.Classes.Aluno;
import Banco.Classes.Professor;
import Banco.Conexao.conexao3G;
import Banco.Conexao.conexaoPortal;
import Banco.Classes.Turma;
import enviosms.Mensagem;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**Classe destinada a operações relacionadas com o objeto Turma
 * Esta classe possui métodos para recuperar um turma de um professor;
 * os alunos de uma turma; uma turma e número de msg de uma turma

 * @author Yoka Sistemas

 * @version full

 * @since Release 01 da aplicação

 */
public class turmaDAO {

    private conexaoPortal conectaPortal;
    private conexao3G conecta3g;
    int idMensagem;
    private String aluno_matriculaFK;
    private String turma_cursoFK;
    private String turma_disciplinaFK;
    private String turma_periodoFK;
    private String turma_turmaFK;
    private String mensagem;
    private String remetente;

     /**Construtor da classe

     * @author Yoka Sistemas

     */
    public turmaDAO() {

        conectaPortal =conexaoPortal.getConexaoPortal();
        conecta3g = conexao3G.getConexao3G();
        //conecta3g.executeSql("SELECT * FROM configuracaoturma");
    }

     /**Método que conta o número de Menssagem de uma Turma
     *
     * @author Yoka Sistemas

     * @param  turma Turma -

     * @return int - número de menssagem da turma

     */
    public int contaMSGTotalTurma(Turma turma) throws SQLException {

        int contaNumeroMSGTurma = 0;
        //conecta3g.conecta();
        String SQL_getMensagensTurma = "SELECT msg FROM mensagem WHERE (" +
                " turma_curso LIKE '%" + turma.getCurso() + "%' AND turma_disciplina LIKE '%" + turma.getDisciplina() + "%'" +
                " AND turma_turma LIKE '%" + turma.getTurma() + "%' AND turma_periodo LIKE '%" + turma.getPeriodo() + "%' )";

       ResultSet rs3= conecta3g.executeSql(SQL_getMensagensTurma);
        rs3.first();

        while (rs3.next()) {

            contaNumeroMSGTurma++;
        }


        return contaNumeroMSGTurma;
    }

     /**Método que lista todas as Mensagem de uma turma

     * @author Yoka Sistemas

     * @param  turma Turma -

     * @return ArrayList<Mensagem> - lista de todas as mensagens de uma turma

     */
    public ArrayList<Mensagem> ListaMSGTurma(Turma turma) throws SQLException {

        ArrayList<Mensagem> mensagens = new ArrayList();
        Mensagem mensagemRodando = new Mensagem();

        //conecta3g.conecta();
        String SQL_getMensagensTurma = "SELECT msg FROM mensagem WHERE (" +
                " turma_curso LIKE '%" + turma.getCurso() + "%' AND turma_disciplina LIKE '%" + turma.getDisciplina() + "%'" +
                " AND turma_turma LIKE '%" + turma.getTurma() + "%' AND turma_periodo LIKE '%" + turma.getPeriodo() + "%' )";

       ResultSet rs3= conecta3g.executeSql(SQL_getMensagensTurma);
        rs3.first();

        while (rs3.next()) {

            mensagemRodando.setIdMensagem(rs3.getInt("idmensagem"));
            mensagemRodando.setCorpoMsg(rs3.getString("msg"));
            mensagemRodando.setTurma_turmaFK(rs3.getString("turma_turma"));
            mensagemRodando.setRemetente(rs3.getString("remetente"));
            mensagemRodando.setTurma_cursoFK(rs3.getString("turma_curso"));
            mensagemRodando.setTurma_disciplinaFK(rs3.getString("turma_disciplina"));
            mensagemRodando.setTurma_periodoFK(rs3.getString("turma_periodo"));

            mensagens.add(mensagemRodando);

        }
        //teste para ver vetor de mensagens
        for (int i = 0; i < mensagens.size(); i++) {

            System.out.println("----------------------------------------");
            System.out.println("Turma: " + mensagens.get(i).getTurma_disciplinaFK() + " " + mensagens.get(i).getTurma_periodoFK() + "\n");
            System.out.println(mensagens.get(i).getCorpoMsg() + "\n");
            System.out.println("----------------------------------------");

        }

        return mensagens;
    }

     /**Método que captura todas as Turma que um Professor leciona

     * @author Yoka Sistemas

     * @param  professor Professsor -

     * @return ArrayList<Turma> - lista de todas as turmas do professor

     */
    public ArrayList<Turma> getTurmasProfessor(Professor professor) throws SQLException {

        //String curso, disciplina, nome, periodo, profMatricula, turma;

        String SQL_getNumMSGTurma;


        ArrayList<Turma> tumasProfessor = new ArrayList();
        String matriculaProfessro = professor.getMatricula();

        //conectaPortal.conecta();
        String SQL_turamsProfessorPT = "SELECT * FROM turma WHERE professor_matricula = '" + matriculaProfessro + "'";
        ResultSet rs=conectaPortal.executeSql(SQL_turamsProfessorPT);
        rs.first();

        if(rs.first()){
            do{
                Turma turmaCorrente = new Turma();
                String curso, disciplina, nome, periodo, profMatricula, turma;
                curso = rs.getString("curso");
                disciplina = rs.getString("disciplina");
                nome = rs.getString("nome");
                periodo = rs.getString("periodo");
                profMatricula = rs.getString("professor_matricula");
                turma = rs.getString("turma");

                turmaCorrente.setCurso(curso);
                turmaCorrente.setDisciplina(disciplina);
                turmaCorrente.setNome(nome);
                //turmaCorrente.setNumeroMSG(idMensagem);
                turmaCorrente.setPeriodo(periodo);
                turmaCorrente.setProfessor_matriculaFK(profMatricula);
                turmaCorrente.setTurma(turma);

                //conecta3g.conecta();
                SQL_getNumMSGTurma = "SELECT numeromsg FROM turma WHERE " +
                        " periodo = '" + periodo + "' AND turma = '" + turma + "'" +
                        " AND disciplina = '" + disciplina + "' AND curso = '" + curso + "'";
               ResultSet rs3= conecta3g.executeSql(SQL_getNumMSGTurma);

                if(rs3.first()){

                    do{

                        int numMsg = rs3.getInt("numeromsg");

                        turmaCorrente.setNumeroMSG(numMsg);


                    }while (rs3.next());
                }
                tumasProfessor.add(turmaCorrente);
            }while (rs.next());
        }

        return tumasProfessor;
    }

     /**Método captura uma Turma

     * @author Yoka Sistemas

     * @param periodo String
     * @param curso String
     * @param turma String
     * @param disciplina String

     * @return Turma - retorna uma Turma

     */
    public Turma getTurma(String periodo, String curso, String turma, String disciplina) {

        //conectaPortal.conecta();
        String tabela = "turma";
        String SQL_getTurma = "SELECT * FROM " + tabela + " WHERE " +
                " periodo = '" + periodo + "' AND turma = '" + turma +
                "' AND disciplina = '" + disciplina + "' AND curso = '" + curso + "'";

        ResultSet rs=conectaPortal.executeSql(SQL_getTurma);

        Turma turm = new Turma();

        try {
            while (rs.next()) {
                turm.setCurso(rs.getString("curso"));
                turm.setDisciplina(rs.getString("disciplina"));
                turm.setPeriodo(rs.getString("periodo"));
                turm.setProfessor_matriculaFK(rs.getString("professor_matricula"));
                turm.setTurma(rs.getString("turma"));
                turm.setNome(rs.getString("nome"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(turmaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
         //conectaPortal.desconecta();

        //conecta3g.conecta();
        SQL_getTurma = "SELECT * FROM " + tabela + " WHERE " +
                " periodo = '" + periodo + "' AND turma = '" + turma +
                "' AND disciplina = '" + disciplina + "' AND curso = '" + curso + "'";

       ResultSet rs3= conecta3g.executeSql(SQL_getTurma);
        try {

            while (rs3.next()) {
                turm.setNumeroMSG(rs3.getInt("numeromsg"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(alunoDAO.class.getName()).log(Level.SEVERE, null, ex);
        }

        //conecta3g.desconecta();
        return turm;
    }

    /**Método captura todos os Aluno de uma Turma

     * @author Yoka Sistemas

     * @param turma Turma

     * @return ArrayList<Aluno> - lista de todos os Alunos de uma Turma

     */
    public ArrayList<Aluno> getAlunosTurma(Turma turma) throws SQLException {

        ArrayList<Aluno> listadeAlunos = new ArrayList<Aluno>();
        ArrayList<String> matriculas = new ArrayList<String>();


        String periodo = turma.getPeriodo();
        String turmaa = turma.getTurma();
        String disciplina = turma.getDisciplina();
        String curso = turma.getCurso();

        String SQL_getMatriculaAlunoTurma = "SELECT * FROM configuracaoturma WHERE(" +
                " turma_curso = '" + curso + "'" +
                " AND turma_disciplina = '" + disciplina + "'" +
                " AND turma_turma = '" + turmaa + "'" +
                " AND turma_periodo = '" + periodo + "' )";

        System.out.println(SQL_getMatriculaAlunoTurma);

        //conectaPortal.conecta();
        //conecta3g.conecta();
       ResultSet rs3= conecta3g.executeSql(SQL_getMatriculaAlunoTurma);
        rs3.first();

        if (rs3.first()) {

            do {

                String matricula = rs3.getString("aluno_matricula");
                matriculas.add(matricula);

            } while (rs3.next());
        }

        String SQL_getAlunoMatricula_BD3g;
        String SQL_getAlunoMatricula_BDPortal;

        for (int i = 0; i < matriculas.size(); i++) {

            //conecta3g.conecta();
            //conectaPortal.conecta();
            rs3= conecta3g.executeSql("SELECT * FROM aluno");
            ResultSet rs=conectaPortal.executeSql("SELECT * FROM aluno");

            SQL_getAlunoMatricula_BD3g = "SELECT * FROM aluno WHERE matricula = '" + matriculas.get(i) + "'";
            SQL_getAlunoMatricula_BDPortal = "SELECT * FROM aluno WHERE matricula = '" + matriculas.get(i) + "'";

             rs3= conecta3g.executeSql(SQL_getAlunoMatricula_BD3g);
             rs=conectaPortal.executeSql(SQL_getAlunoMatricula_BDPortal);

            Aluno alunoCorrente = new Aluno();
            alunoCorrente.setMatricula(matriculas.get(i));

            if (rs3.first()) {

                alunoCorrente.setCelular(rs3.getString("celular"));
            }
            if (rs.first()) {

                alunoCorrente.setNome(rs.getString("nome"));
            }
            listadeAlunos.add(alunoCorrente);

        }

        //conecta3g.desconecta();
         //conectaPortal.desconecta();
        return listadeAlunos;
    }

    public static void main(String args[]) throws SQLException {

        /*
        //teste de alunos de uma tumrma
        turmaDAO teste1 = new turmaDAO();
        ArrayList<Aluno> listadeALunos = new ArrayList<Aluno>();
        Turma turma = new Turma();

        turma.setCurso("Engenharia de Computação");
        turma.setDisciplina("TEC408");
        turma.setPeriodo("2009.1");
        turma.setTurma("02");

        listadeALunos = teste1.getAlunosTurma(turma);

        System.out.println("LISTA DE ALUNOS DA DISCIPLINA: "+turma.getDisciplina()+" TURMA: "+turma.getTurma());
        System.out.println("-----------------------------");
        for(int i = 0; i < listadeALunos.size(); i++){

        System.out.println("Matricula: "+listadeALunos.get(i).getMatricula());
        System.out.println("Nome: "+listadeALunos.get(i).getNome());
        System.out.println("Celular: "+listadeALunos.get(i).getCelular());
        System.out.println("-----------------------------");

        }
         */

        //teste professor turma
        turmaDAO teste = new turmaDAO();
        Professor professor = new Professor();
        professor.setMatricula("011222333");
        ArrayList<Turma> turmasProfessor = new ArrayList<Turma>();

        turmasProfessor = teste.getTurmasProfessor(professor);
        System.out.println("Numero de Turmas: "+turmasProfessor.size());
        System.out.println("----------------------");
        for(int i = 0; i < turmasProfessor.size(); i++){

            System.out.println("Curso:  "+turmasProfessor.get(i).getCurso());
            System.out.println("Disciplina: "+turmasProfessor.get(i).getDisciplina());
            System.out.println("Nome: "+turmasProfessor.get(i).getNome());
            System.out.println("Periodo: "+turmasProfessor.get(i).getPeriodo());
            System.out.println("Professor: "+turmasProfessor.get(i).getProfessor_matriculaFK());
            System.out.println("Turma: "+turmasProfessor.get(i).getTurma());
            System.out.println("Num Msg: "+turmasProfessor.get(i).getNumeroMSG());
            System.out.println("----------------------");


        }
    }
}
